iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0
DevOps

不爆肝學習 Ansible 的短暫30天系列 第 3

Day 03 – 認識 Inventory

  • 分享至 

  • xImage
  •  

注意!今日所填 IP 皆為假資訊,請根據自己拿到的機器 IP 進行填寫。

今日目標

  • 了解什麼是 Inventory
  • 建立一個最簡單的 Inventory
  • 測試 Ansible 與遠端機器的連線

為什麼會需要 Inventory

大家可以想想,Ansible 需要同時控制這麼多台機器,總不可能平白無故的知道這些機器的資訊,更不可能將這些機器資訊存放在記憶體裡面,所以需要有一份檔案來記錄這些機器的資訊。

換句話說也可以把 Inventory 當作一份『通訊錄』,上面記著每一台機器的 IP、User 等等...

Ansible 會依據 Inventory 的資訊尋找目標機器,並在每台機器上執行對應任務。

建立最簡單的 Inventory

在工作目錄下建立檔案 inventory.ini

[web]
192.168.0.1
192.168.0.2

[db]
192.168.0.3

這裡我們定義了兩組主機:

  • web:兩台運行 web 的主機
  • db:運行資料庫的主機

測試連線

Ansible 連線到遠端機器主要是透過 SSH,所以要先確認自己可以以 SSH 登入目標主機(必要時可用 -u 指定使用者,或在 inventory 設定 ansible_user;私鑰可用 --private-key 或在 inventory 設定 ansible_ssh_private_key_file)。

Day 01 的時候有跟大家介紹過 ping 這個 Ansible 模組,所以這次也透過這個模組來測試。

ansible all -i inventory.ini -m ping

也可以使用完整模組名稱:

ansible all -i inventory.ini -m ansible.builtin.ping

如果有成功,會看到類似這樣的輸出:

192.168.0.1 | SUCCESS => {
  "changed": false,
  "ping": "pong"
}
192.168.0.2 | SUCCESS => {
  "changed": false,
  "ping": "pong"
}
192.168.0.3 | SUCCESS => {
  "changed": false,
  "ping": "pong"
}

小提醒:可以先檢查 inventory 是否可被解析:

ansible-inventory -i inventory.ini --list

補充說明

當然如果你對於 YAML 比較擅長的話,inventory 也可以用 YAML 來撰寫哦(通常檔名會取為 inventory.yaml,使用時請改成 -i inventory.yaml)。

web:
  hosts:
    web-1:
      ansible_host: 192.168.0.1
    web-2:
      ansible_host: 192.168.0.2
db:
  hosts:
    db-1:
      ansible_host: 192.168.0.3

筆者比較喜歡 YAML 的寫法,這部分就看大家的喜好決定了哈哈

進一步也可以在 ansible.cfg 指定預設 inventory,這樣就能省略 -i

[defaults]
inventory = ./inventory.ini

作業練習時間

又來到每日作業時間,今天呢希望讀者們可以建立自己的 inventory.ini,並且成功去測試所有主機的連線。

  1. 建立自己的 inventory.ini
  2. 成功用 ansible all -i inventory.ini -m ping 測試所有主機。
  3. 嘗試只測試 web group 的主機(tips:ansible web -i inventory.ini -m ping)。

明日預告

今天我們認識了 Inventory,明天就要來使用 Ansible 在遠端機器上安裝套件嘍!


上一篇
Day 02 – 安裝 Ansible
下一篇
Day04 – 透過 Ansible 安裝套件
系列文
不爆肝學習 Ansible 的短暫30天4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言